package frsf.cidisi.exercise.idemiatp.situationCalculus.actions;

import frsf.cidisi.exercise.idemiatp.situationCalculus.Ciudad;
import frsf.cidisi.exercise.idemiatp.situationCalculus.StateArquelogo;
import frsf.cidisi.exercise.idemiatp.situationCalculus.StateIsla;
import frsf.cidisi.exercise.idemiatp.situationCalculus.Tesoro;
import frsf.cidisi.faia.agent.situationcalculus.SituationCalculusAction;
import frsf.cidisi.faia.state.AgentState;
import frsf.cidisi.faia.state.EnvironmentState;

public class TomarCofre extends SituationCalculusAction {

    @Override
    public EnvironmentState execute(AgentState ast, EnvironmentState est) {
        
    	 StateIsla environmentState = (StateIsla) est;
         StateArquelogo agState = ((StateArquelogo) ast);

         String stringCiudad = agState.getPosicion();
       // Ciudad ciudadActual = agState.getMapa().getCiudad(stringCiudad);
         
         
         Ciudad ciudadEntorno = environmentState.getMapa().getCiudad(environmentState.getPosicionArquelogo());
         
         if (ciudadEntorno.getTesoro().getValor() != 0) {
         	
         	float peso = agState.getPeso();
             Tesoro tesoro = ciudadEntorno.getTesoro();
             if((peso+tesoro.getPeso()) <= 450 && tesoro.getPeso() != 0){ //Verifico si el tesoro se puede juntar y si no esta vacio(Profanado)
         		agState.setValor(agState.getValor() + tesoro.getValor());
         		agState.setPeso(peso + tesoro.getPeso());}
             
             
         	//agState.getCiudadesVisitadas().add("Toma el tesoro");
             // Update the real world
             
         	ciudadEntorno.getTesoro().vaciarTesoro();
         	
             // Update the agent state
         	
         	//ciudadActual.getTesoro().vaciarTesoro();
            
         	
             return environmentState;
         }

         return null;
    }

    @Override
    public String toString() {
        return "TomarCofre";
    }
}

